const inviteObj = uniCloud.importObject("invite-interview")
const interviewObj = uniCloud.importObject("interview-history")


const myHeaders = {
	"Content-Type": "application/json",
	"Authorization": "Bearer sk-6c4a0568c12442c6bfd1b6a480f5faed"
};


function callService(prompt) {
	const raw = {
		"model": "qwen-turbo",
		"response_foramt": {
			"type": "json_object"
		},
		"messages": [{
				"role": "system",
				"content": "You are a helpful assistant."
			},
			{
				"role": "user",
				"content": prompt
			}
		]
	};

	return uniCloud.httpclient.request(
			`https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions`, {
				method: "POST",
				headers: myHeaders,
				data: raw,
				timeout: 60000,
				contentType: 'json',
				dataType: 'json'
			}
		).then(res => res.res.data).then(res => {
			console.log(res)
			return res
		})
		.catch((error) => console.error(error));
}



module.exports = {
	_before: function() { // 通用预处理器

	},



	getQuestion(topic, position) {
		var prompt = `
				你是一个人工智能模拟面试官，在${topic}方面具有专业知识。
		        你的工作是为候选人进行一场现实的、具有挑战性的模拟面试。
		        你的问题应该评估应试者的知识、解决问题的能力以及在实际场景中应用概念的能力。确保面试是彻底的，有吸引力的，涵盖了职位的各个方面，而不是重复的问题。
		        你要给出5个问题，这些问题要体现(${position})岗位胜任力指标(知识，职业技能，求职意愿，价值观，团队合作，个人优势)。
		        第一个问题是：请做1分钟内的自我介绍（建议：工作经验，教育背景）
		        最后把数据以标准的JSON的形式输出,不要用\`\`\`json包裹数据，也不要输出其他内容。
		        ## Format
		        [{"question":"<问题>","competency":"<岗位胜任力指标>"},...]
		`
		return callService(prompt)

	},

	getInterviewFeedback(topic, position, quesition) {
		console.log(topic, position, quesition)
		var history = ''
		quesition.map(item => {
			history += `interviewer: ${item['question']}\n`
			history += `candidate: ${item['answer']}\n`
		})
		var prompt = `
			你是一个人工智能模拟面试官，在${topic}方面具有专业知识。
			根据以下模拟面试的对话历史，为用户的回答提供建设性的反馈。
			给出岗位胜任力指标的六个维度（知识，职业技能，求职意愿，价值观，团队合作，个人优势）的分数\n\n
			总体而言，从清晰性、技术知识、解决问题的能力和沟通技巧等方面评估候选人的表现。强调自己的改进之处，并提出可行的建议，以提高面试的准备程度。
			提供详细的反馈，从对话历史中提到具体的例子来支持你的评估。\n\n
			谈话历史:\n${history} \n\n
			具体说明并评论。"
		`
		return callService(prompt)
	},

	async getResumeFeedback(data) {

		var text = await uniCloud.httpclient.request(
			`http://49.235.168.145:5000/resume/parser`, {
				method: "POST",
				headers: myHeaders,
				data: {
					input_text: data
				},
				contentType: 'json',
				dataType: 'json'
			}
		).then(res => res.res.data)

		var resume = text.extractedText

		console.log(text)

		var prompt = `
			 你是一名资深的简历指导老师。擅长分析诊断简历。
			 根据用户提供的简历内容你需要从以下几个规则来诊断。按照制定的规则来反馈，做的不足的地方要给出建议，不要泛泛而谈、根据具体的简历内容来诊断，需要举例说明优点，缺点，建议。
			 ## 规则
			 1.完整性：简历信息是否完整（如个人信息、自我介绍、教育背景、工作经历、项目经验、专业技能等）？
			 2.针对性：简历是否强调了与目标职位最相关的经验和技能，是否展示了与申请职位直接相关的成就和经历？
			 3.相关性：经历是否与工作岗位密切相关，是否突出显示了与应聘职位匹配的专业技能和成就，是否避免了无关的经历或过多的细节，只保留与职位相关的信息？
			 4.量化成果：工作经历和成就是否有具体的数字或度量标准来支撑，成果是否具体可衡量，而不是模糊的描述？
			 5.客观性：内容是否真实可信，没有夸大其词，是否避免了主观评价，而是通过具体例子来证明自己的能力？
			 简历内容:
			 ${resume}
			 将返回结果格式化成JSON结构，不要用\`\`\`json包裹数据，也不要输出其他内容。
			 ## 格式
			 {"feedback":[{"rule":<规则>,"bad":<缺点>,"suggest":<建议>},...]}
		`
		return callService(prompt)
	},

	async getFeedbackByTask(url) {
		return await uniCloud.httpclient.request(
			url, {
				contentType: 'json',
				dataType: 'json'
			}
		)
	}

}